import time
import unittest

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.support.select import Select


class MyTestCaseFireFox(unittest.TestCase):
    driver = None

    @classmethod
    def setUpClass(cls) -> None:
        # 注册 驱动打开的位置
        service = Service(executable_path="../../dirver_exe/geckodriver.exe")
        # 打开浏览器  driver 代表 浏览器对象
        cls.driver = webdriver.Firefox(service=service)

    def test_by_api(self):
        """测试 selenium 常用的 Assert  断言的使用"""
        self.driver.get("http://192.168.0.152:8080/testhtml/exam/index.html")
        self.driver.find_element(By.TAG_NAME, "a").click()

        # 1. 获得 网页的 标题名  ，通过网页的标题名的不同 可以 设置 断言 判断是否 操作  成功  title
        title = self.driver.title
        # 断言的使用
        self.assertEqual('房源注册', title)

        # 2. 获得网页 的 源代码  page_source
        page_source = self.driver.page_source
        if page_source.__contains__('Edit by Hanamaki'):
            print('包含')
        else:
            print('不包含')

        # 使用 断言 来判断 表达式的结果是否为 True(assertTrue)  或者 是否为 False(assertFalse)
        self.assertTrue(page_source.__contains__('Edit by Hanamaki'))

        # 3. 获得网页 打开的 URL 路径信息  current_url
        print(self.driver.current_url)

        # 4. 获得 网页中 指定元素 的文本值  text
        print(self.driver.find_element(By.XPATH, "//p[@class='edit']").text)

        # 5. 获得 网页中 执行元素的 标签名 tag_name
        print(self.driver.find_element(By.XPATH, "//p[@class='edit']").tag_name)

        # 6. 获得 网页中 执行元素中的属性的属性值
        print(self.driver.find_element(By.XPATH, "//p[@class='edit']").get_attribute('class'))

    def test_by_is_more(self):
        """判断方法的使用"""
        self.driver.get("http://192.168.0.152:8080/testhtml/exam/House.html")

        # 1. isSelected 判断 元素 是否被选中
        print('被选中' if self.driver.find_element(By.NAME, "c1").is_selected() else '未选中')

        # 2. isEnabled
        # 文本框默认情况下 是 已启用的
        # readOnly 只读的情况下    已启用的
        # disabled 禁用状态下 是 未启用的
        wymc = self.driver.find_element(By.CLASS_NAME, "uname")
        print('已启用中' if wymc.is_enabled() else '未启用')

        # 3. isDisplayed
        text = self.driver.find_element(By.XPATH, "//p[@class='edit']")
        print('未隐藏' if text.is_displayed() else '已隐藏')

    def test_screenshot(self):
        """测试截图的使用 """
        self.driver.get("http://192.168.0.152:8080/testhtml/exam/House.html")

        self.driver.get_screenshot_as_file('./screenshot.png')

    def test_upload_file(self):
        """上传文件的使用"""
        self.driver.get("http://192.168.0.152:8080/testhtml/exam/House.html")

        # 对 需要进行文件上传的  标签 进行元素 定位
        file = self.driver.find_element(By.XPATH, "//input[@type='file']")
        # 在传递文件时 ，只需要 传递一个 文件的路径即可
        file.send_keys(
            'C:\\Users\\edz\\Desktop\\PythonStudy0224\\ltd\\hanamaki\\python\\selenium\\day01\\study\\screenshot.png')
        file.send_keys(
            'C:\\Users\\edz\\Desktop\\PythonStudy0224\\ltd\\hanamaki\\python\\selenium\\day01\\study\\screenshot.png')

    @classmethod
    def tearDownClass(cls) -> None:
        # cls.driver.close()  # 只会关闭一个标签页
        # cls.driver.quit()  # 直接退出浏览器 并且关闭所有的标签页
        pass


if __name__ == '__main__':
    unittest.main()
